package test_select

import "fmt"

func writeChan(c chan int, x int)  {
	c <- x
	fmt.Println("c<-x")
}

func readChan(c chan int)  {
	fmt.Println("c<-x", <- c)
}


func Do()  {
	fmt.Println("测试select")

	x := 1

	//没缓存，写入后阻塞等读取，得用go，否则会因为阻塞死锁
	//select会击中default，如果没有default，则会击中<-c
	//c := make(chan int)
	//go writeChan(c, x)

	//有缓存，写入后阻塞不会阻塞，可以不用go
	//select会击中<-c
	c := make(chan int, 1)
	writeChan(c, x) //注释掉会击中c<-x

	//go readChan(c)

	select {
	case c<-x:
		fmt.Println("走了 c<-x")
	case <-c:
		fmt.Println("走了 <-c")
	default: //如果没有default，select会阻塞直到击中case
		fmt.Println("走了 default")
	}



}